package com.hera.base.web.vaadin.mantenimiento;

import static com.hera.base.util.InputData.getObjectData;
import static com.hera.base.util.InputData.getStringData;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;

import com.hera.base.util.Constantes;
import com.hera.base.util.FiltroDTO;
import com.hera.base.util.TableCustom;
import com.hera.base.web.BaseUI;
import com.hera.base.web.MantenimientoMaestroDetalle;
import com.hera.process.config.domain.Department;
import com.hera.process.config.domain.Organization;
import com.hera.process.config.rest.delegate.ConfigDelegate;
import com.vaadin.annotations.AutoGenerated;
import com.vaadin.data.Item;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.data.util.HierarchicalContainer;
import com.vaadin.event.FieldEvents.TextChangeEvent;
import com.vaadin.event.FieldEvents.TextChangeListener;
import com.vaadin.server.ThemeResource;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.TextField;
import com.vaadin.ui.TreeTable;
import com.vaadin.ui.VerticalLayout;

public class DepartmentUI extends BaseUI implements MantenimientoMaestroDetalle, ClickListener {

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	@AutoGenerated
	private VerticalLayout mainLayout;
	@AutoGenerated
	private VerticalLayout verticalLayout_2;
	@AutoGenerated
	private HorizontalLayout lytDetalle;
	@AutoGenerated
	private VerticalLayout pnlDetalle;
	@AutoGenerated
	private HorizontalLayout horizontalLayout_1;
	@AutoGenerated
	private Button btnEliminarDetalle;
	@AutoGenerated
	private Button btnGuardarDetalle;
	@AutoGenerated
	private TextArea txaDescripcion;
	@AutoGenerated
	private ComboBox cmbPadre;
	@AutoGenerated
	private TextField txtNombreDeta;
	@AutoGenerated
	private TextField txtCodigoDeta;
	@AutoGenerated
	private Label label_2;
	@AutoGenerated
	private HorizontalLayout lytTablaDetalle;
	@AutoGenerated
	private VerticalLayout verticalLayout_3;
	@AutoGenerated
	private TreeTable treeDeparment;
	@AutoGenerated
	private Label label_3;
	@AutoGenerated
	private HorizontalLayout lytMaestro;
	@AutoGenerated
	private VerticalLayout pnlFormulario;
	@AutoGenerated
	private HorizontalLayout hlytBotonera;
	@AutoGenerated
	private Button btnEliminarMaestro;
	@AutoGenerated
	private Button btnGuardarMaestro;
	@AutoGenerated
	private TextArea txaDescripcionMaestro;
	@AutoGenerated
	private TextField txtNombreMaestro;
	@AutoGenerated
	private Label label_1;
	@AutoGenerated
	private HorizontalLayout lytTablaMaestra;
	@AutoGenerated
	private TableCustom tblfMaestro;
	private static final Logger log = Logger.getLogger(DepartmentUI.class);
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * The constructor should first build the main layout, set the composition
	 * root and then do any custom initialization.
	 * 
	 * The constructor will not be automatically regenerated by the visual
	 * editor.
	 */
	// Declaracion de las Variables
	@Autowired
	ConfigDelegate configDelegate;
	boolean esNuevo;
	boolean esNuevoDetalle;
	Department departaMent;
	Organization organizaTion;

	public DepartmentUI() {
		buildMainLayout();
		setCompositionRoot(mainLayout);
		
		// TODO add user code here
	}

	@Override
	protected void postConstruct() {
		cargarFormulario();
		buscarMaestro();
		buscarDetalle();
		HabilitarControles(false);
	}

	@Override
	public void buttonClick(ClickEvent event) {
		if (event.getButton().equals(btnEliminarMaestro)) {
			removeStyleNotValidAllControllers();
			eliminarMaestro();
		} else if (event.getButton().equals(btnGuardarMaestro)) {
			removeStyleNotValidAllControllers();
			guardarMaestro();
		} else if (event.getButton().equals(btnEliminarDetalle)) {
			removeStyleNotValidDetalleControllers();
			eliminarDetalle();
		} else if (event.getButton().equals(btnGuardarDetalle)) {
			removeStyleNotValidDetalleControllers();
			guardarDetalle();
		}

	}

	public void HabilitarControles(boolean habilitar) {

		txtCodigoDeta.setEnabled(habilitar);
		txtNombreDeta.setEnabled(habilitar);
		cmbPadre.setEnabled(habilitar);
		btnEliminarMaestro.setEnabled(habilitar);
		btnGuardarDetalle.setEnabled(habilitar);

	}

	@Override
	public void cargarFormulario() {

		txtNombreMaestro.setNullRepresentation("");
		txaDescripcionMaestro.setNullRepresentation("");
		txtCodigoDeta.setNullRepresentation("");
		txtNombreDeta.setNullRepresentation("");
		txaDescripcionMaestro.setNullRepresentation(StringUtils.EMPTY);
		txaDescripcion.setNullRepresentation(StringUtils.EMPTY);
		
		log.info("CARGA DEPARTAMENT");
		esNuevo = true;

		organizaTion = null;
		esNuevoDetalle = true;
		departaMent = null;

		txtCodigoDeta.setStyleName("fieldRequired");
		txtNombreDeta.setStyleName("fieldRequired");
		
		btnEliminarMaestro.setVisible(false);
		btnEliminarMaestro.addClickListener(this);
		btnGuardarMaestro.addClickListener(this);
		
		btnEliminarDetalle.setVisible(false);
		btnEliminarDetalle.addClickListener(this);
		btnGuardarDetalle.addClickListener(this);
		
		tblfMaestro.setTitulo("Lista de Organizacion");
		tblfMaestro.setHeight("200px");

		tblfMaestro.addColumn("name", "Nombre", 160, true, String.class);
		tblfMaestro.addColumn("description", "Descripción", 300, true, String.class);
		tblfMaestro.construir();
		tblfMaestro.addTextChangeListener(new TextChangeListener() {
			private static final long serialVersionUID = 1L;

			@Override
			public void textChange(TextChangeEvent event) {
				buscarMaestro(event);

			}
		});
		tblfMaestro.addValueChangeListener(new ValueChangeListener() {

			private static final long serialVersionUID = 1L;

			@Override
			public void valueChange(ValueChangeEvent event) {
				removeStyleNotValidAllControllers();
				organizaTion = (Organization) tblfMaestro.getSelectedItem(event);
				esNuevo = (organizaTion == null);
				tblfMaestro.limpiarFiltro();
				if (esNuevo) {
					limpiarMaestro();
					HabilitarControles(false);
					treeDeparment.removeAllItems();
				} else {
					btnEliminarMaestro.setVisible(true);					
					txtNombreMaestro.setValue(organizaTion.getName());
					txaDescripcionMaestro.setValue(organizaTion.getDescription());
					HabilitarControles(true);
					buscarDetalle();
					
				}

			}
		});
		
		log.info("FIN ORGANIZATION");

	}
	
	private void cargarComboSuperior(){
		FiltroDTO filtroDTO=new FiltroDTO();
		filtroDTO.addParametro("organization.idOrganization", organizaTion.getIdOrganization());
		List<Department> lstDepartment=configDelegate.findAllDepartments(filtroDTO);
		BeanItemContainer<Department>container=new BeanItemContainer<Department>(Department.class);
		container.addAll(lstDepartment);
		cmbPadre.setContainerDataSource(container);
		cmbPadre.setItemCaptionPropertyId("name");
		
	} 

	public void removeStyleNotValidAllControllers(){
		removeStyleNotValidMaestroControllers();
		removeStyleNotValidDetalleControllers();
	}
	
	public void removeStyleNotValidMaestroControllers(){
		/*txtCodigoMaestro.removeStyleName(Constantes.VALIDACION_CAMPOS.CAMPO_REQUERIDO_VACIO);*/
		txtNombreMaestro.removeStyleName(Constantes.VALIDACION_CAMPOS.CAMPO_REQUERIDO_VACIO);
		txaDescripcionMaestro.removeStyleName(Constantes.VALIDACION_CAMPOS.CAMPO_REQUERIDO_VACIO);
	}
	
	public void removeStyleNotValidDetalleControllers(){
		/*txtNombreDetalle.removeStyleName(Constantes.VALIDACION_CAMPOS.CAMPO_REQUERIDO_VACIO);
		txtOrdenDetalle.removeStyleName(Constantes.VALIDACION_CAMPOS.CAMPO_REQUERIDO_VACIO);
		txtCodigoDetalle.removeStyleName(Constantes.VALIDACION_CAMPOS.CAMPO_REQUERIDO_VACIO);
		txtValorDetalle.removeStyleName(Constantes.VALIDACION_CAMPOS.CAMPO_REQUERIDO_VACIO);*/
		txaDescripcionMaestro.removeStyleName(Constantes.VALIDACION_CAMPOS.CAMPO_REQUERIDO_VACIO);
		
	}
	
	@Override
	public void buscarMaestro() {
		buscarMaestro(null);

	}

	@Override
	public void buscarMaestro(TextChangeEvent event) {
		log.info("inicio buscarMaestro");
		FiltroDTO filtroDTO = tblfMaestro.getFiltroDTO(event);
		filtroDTO.addOrdenamientoAscendente("name");
		List<Organization> lstOrganizations = configDelegate.findAllOrganizations(filtroDTO);
		tblfMaestro.setLstData(lstOrganizations);
		limpiarMaestro();

	}

	@Override
	public void limpiarMaestro() {
		log.info("INICIO LIMPIAR MAESTRO ");
		btnEliminarMaestro.setVisible(false);		
		txtNombreMaestro.setValue("");
		txaDescripcionMaestro.setValue("");
		log.info("FIN LIMPIARMAESTRO");

	}

	@Override
	public void eliminarMaestro() {
		log.info("INICIO ELIMINAR ORGANIZATION");
		configDelegate.deleteOrganization(organizaTion);
		buscarMaestro();
		limpiarMaestro();
		log.info(" FIN ELIMINAR ORGANIZATION");

	}

	@Override
	public void guardarMaestro() {
		log.info("INICIO GUARDAR MAESTRO");
		if (esNuevo) {
			organizaTion = new Organization();
			obtenerDatosFormulario(organizaTion);
			configDelegate.createOrganization(organizaTion);
		} else {
			obtenerDatosFormulario(organizaTion);
			configDelegate.updateOrganization(organizaTion);
		}
		limpiarMaestro();
		buscarMaestro();
		log.info("FIN GUARDARMAESTRO");

	}

	@Override
	public void buscarDetalle() {
		buscarDetalle(null);

	}

	@Override
	public void buscarDetalle(TextChangeEvent event) {
		log.info("LISTAR TODO DEPARTAMENT");
		if (organizaTion == null) {
			treeDeparment.removeAllItems();
			return;

		}
		
		HierarchicalContainer treeContainer=new HierarchicalContainer();
		treeContainer.addContainerProperty("Opcion", String.class, "");
		treeContainer.addContainerProperty("Codigo", String.class, "");
		treeContainer.addContainerProperty("Objeto", Department.class, "");
		int indice=1;
		HashMap<Long, List<Department>> lstOpciones=configDelegate.findDepartmenOrganization(organizaTion);
		agregarTree(Constantes.MENU.ROOT, lstOpciones, null,treeContainer); 
		treeDeparment.setContainerDataSource(treeContainer);
		treeDeparment.setItemCaptionPropertyId("nombre");
		treeDeparment.setVisibleColumns(new Object[]{"Opcion","Codigo"});
		treeDeparment.setSelectable(true);
		treeDeparment.setImmediate(true);
		treeDeparment.addValueChangeListener(new ValueChangeListener() {
			
			/**
			 * 
			 */
			private static final long serialVersionUID = 1L;

			@Override
			public void valueChange(ValueChangeEvent event) {
				removeStyleNotValidDetalleControllers();
				Item item=treeDeparment.getItem(treeDeparment.getValue());
				esNuevoDetalle=(item==null);
				if(esNuevoDetalle){
					limpiarDetalle();
				}else{
					departaMent=(Department)item.getItemProperty("Objeto").getValue();
					btnEliminarDetalle.setVisible(true);
					btnGuardarDetalle.setCaption("Modificar");
					txtCodigoDeta.setValue(departaMent.getIntDepartmentCode());
					txtNombreDeta.setValue(departaMent.getName());
					cmbPadre.setValue(departaMent.getDepartment());
					txaDescripcion.setValue(departaMent.getDescription());
				}	
			}
		});
		for (Object itemId: treeDeparment.getItemIds()){
			treeDeparment.setCollapsed(itemId,false);
		}
		cargarComboSuperior();
		limpiarDetalle();

	}

	
	private void agregarTree(Long codigo, Map<Long, List<Department>> map, Department padre,HierarchicalContainer treeContainer) {
		if(!map.containsKey(codigo))
		{
			return;
		}
		for (Department opc : map.get(codigo)) {
			if(opc.getDepartment()==null)//ES PADRE
			{
				treeContainer.addItem(opc);
				treeContainer.getItem(opc).getItemProperty("Opcion").setValue(opc.getName());
				treeContainer.getItem(opc).getItemProperty("Codigo").setValue(opc.getIntDepartmentCode());
				treeContainer.getItem(opc).getItemProperty("Objeto").setValue(opc);
				treeContainer.setParent(opc, null);
				treeContainer.setChildrenAllowed(opc, true);
			}else
			{
				treeContainer.addItem(opc);
				
				treeContainer.getItem(opc).getItemProperty("Opcion").setValue(opc.getName());
				treeContainer.getItem(opc).getItemProperty("Codigo").setValue(opc.getIntDepartmentCode());
				treeContainer.getItem(opc).getItemProperty("Objeto").setValue(opc);
				treeContainer.setParent(opc, padre);
				treeContainer.setChildrenAllowed(opc, true);
			}
			
			if (map.get(codigo) != null) {
				agregarTree(opc.getIdDepartment(), map, opc, treeContainer);
			} 
		}
	}
	
	@Override
	public void limpiarDetalle() {
		log.info("inicio limpiarDetalle");
		btnEliminarDetalle.setVisible(false);
		btnGuardarDetalle.setCaption("Nuevo");
		btnGuardarDetalle.setVisible(true);
		txtCodigoDeta.setValue("");
		txtNombreDeta.setValue("");
		cmbPadre.setValue(null);
		txaDescripcion.setValue("");
		log.info("fin limpiarDetalle");

	}

	@Override
	public void eliminarDetalle() {
		configDelegate.deleteDepartment(departaMent);
		buscarDetalle();
		limpiarDetalle();

	}

	@Override
	public void guardarDetalle() {
		Department departmentNew;
		if (esNuevoDetalle) {
			departmentNew = new Department();
			obtenerDatosFormulario(departmentNew);
			
			configDelegate.createDepartment(departmentNew);

		} else {
			obtenerDatosFormulario(departaMent);
			configDelegate.updateDepartment(departaMent);
		}
		limpiarDetalle();
		buscarDetalle();

	}

	private void obtenerDatosFormulario(Organization organization) {
		organization.setName(getStringData(txtNombreMaestro, "Nombre "));
		organization.setDescription(getStringData(txaDescripcionMaestro, "Decripcion"));
	}

	private void obtenerDatosFormulario(Department departaMent) {
		departaMent.setIntDepartmentCode(getStringData(txtCodigoDeta, "Codigo"));
		departaMent.setName(getStringData(txtNombreDeta, "Nombre"));
		departaMent.setDepartment(getObjectData(cmbPadre,Department.class,"Departamento Superior"));
		departaMent.setOrganization(organizaTion);
	}

	@AutoGenerated
	private VerticalLayout buildMainLayout() {
		// common part: create layout
		mainLayout = new VerticalLayout();
		mainLayout.setCaption("Elim");
		mainLayout.setImmediate(false);
		mainLayout.setWidth("100%");
		mainLayout.setHeight("100%");
		mainLayout.setMargin(false);
		
		// top-level component properties
		setWidth("100.0%");
		setHeight("100.0%");
		
		// verticalLayout_2
		verticalLayout_2 = buildVerticalLayout_2();
		mainLayout.addComponent(verticalLayout_2);
		
		return mainLayout;
	}

	@AutoGenerated
	private VerticalLayout buildVerticalLayout_2() {
		// common part: create layout
		verticalLayout_2 = new VerticalLayout();
		verticalLayout_2.setImmediate(false);
		verticalLayout_2.setWidth("-1px");
		verticalLayout_2.setHeight("-1px");
		verticalLayout_2.setMargin(false);
		
		// lytMaestro
		lytMaestro = buildLytMaestro();
		verticalLayout_2.addComponent(lytMaestro);
		
		// lytDetalle
		lytDetalle = buildLytDetalle();
		verticalLayout_2.addComponent(lytDetalle);
		
		return verticalLayout_2;
	}

	@AutoGenerated
	private HorizontalLayout buildLytMaestro() {
		// common part: create layout
		lytMaestro = new HorizontalLayout();
		lytMaestro.setImmediate(false);
		lytMaestro.setWidth("-1px");
		lytMaestro.setHeight("-1px");
		lytMaestro.setMargin(false);
		lytMaestro.setSpacing(true);
		
		// lytTablaMaestra
		lytTablaMaestra = buildLytTablaMaestra();
		lytMaestro.addComponent(lytTablaMaestra);
		
		// pnlFormulario
		pnlFormulario = buildPnlFormulario();
		lytMaestro.addComponent(pnlFormulario);
		
		return lytMaestro;
	}

	@AutoGenerated
	private HorizontalLayout buildLytTablaMaestra() {
		// common part: create layout
		lytTablaMaestra = new HorizontalLayout();
		lytTablaMaestra.setImmediate(false);
		lytTablaMaestra.setWidth("560px");
		lytTablaMaestra.setHeight("-1px");
		lytTablaMaestra.setMargin(false);
		
		// tblfMaestro
		tblfMaestro = new TableCustom();
		tblfMaestro.setImmediate(false);
		tblfMaestro.setWidth("-1px");
		tblfMaestro.setHeight("-1px");
		lytTablaMaestra.addComponent(tblfMaestro);
		
		return lytTablaMaestra;
	}

	@AutoGenerated
	private VerticalLayout buildPnlFormulario() {
		// common part: create layout
		pnlFormulario = new VerticalLayout();
		pnlFormulario.setImmediate(false);
		pnlFormulario.setWidth("-1px");
		pnlFormulario.setHeight("-1px");
		pnlFormulario.setMargin(false);
		pnlFormulario.setSpacing(true);
		
		// label_1
		label_1 = new Label();
		label_1.setStyleName("titulo");
		label_1.setImmediate(false);
		label_1.setWidth("-1px");
		label_1.setHeight("-1px");
		label_1.setValue("Organizacion");
		pnlFormulario.addComponent(label_1);
		pnlFormulario.setComponentAlignment(label_1, new Alignment(20));
		
		// txtNombreMaestro
		txtNombreMaestro = new TextField();
		txtNombreMaestro.setStyleName("fieldRequired");
		txtNombreMaestro.setImmediate(false);
		txtNombreMaestro.setDescription("Nombre");
		txtNombreMaestro.setWidth("200px");
		txtNombreMaestro.setHeight("-1px");
		txtNombreMaestro.setInputPrompt("Nombre");
		pnlFormulario.addComponent(txtNombreMaestro);
		
		// txaDescripcionMaestro
		txaDescripcionMaestro = new TextArea();
		txaDescripcionMaestro.setImmediate(false);
		txaDescripcionMaestro.setDescription("Descripción");
		txaDescripcionMaestro.setWidth("200px");
		txaDescripcionMaestro.setHeight("-1px");
		txaDescripcionMaestro.setInputPrompt("Descripción");
		pnlFormulario.addComponent(txaDescripcionMaestro);
		
		// hlytBotonera
		hlytBotonera = buildHlytBotonera();
		pnlFormulario.addComponent(hlytBotonera);
		
		return pnlFormulario;
	}

	@AutoGenerated
	private HorizontalLayout buildHlytBotonera() {
		// common part: create layout
		hlytBotonera = new HorizontalLayout();
		hlytBotonera.setStyleName("buttoncust");
		hlytBotonera.setImmediate(false);
		hlytBotonera.setWidth("-1px");
		hlytBotonera.setHeight("-1px");
		hlytBotonera.setMargin(false);
		hlytBotonera.setSpacing(true);
		
		// btnGuardarMaestro
		btnGuardarMaestro = new Button();
		btnGuardarMaestro.setCaption("");
		btnGuardarMaestro.setIcon(new ThemeResource("images/save_16_2.png"));
		btnGuardarMaestro.setDescription("Guardar");
		btnGuardarMaestro.setImmediate(true);
		btnGuardarMaestro.setWidth("-1px");
		btnGuardarMaestro.setHeight("-1px");
		hlytBotonera.addComponent(btnGuardarMaestro);
		
		// btnEliminarMaestro
		btnEliminarMaestro = new Button();
		btnEliminarMaestro.setCaption("");
		btnEliminarMaestro.setIcon(new ThemeResource("images/trash_16_2.png"));
		btnEliminarMaestro.setDescription("Eliminar");
		btnEliminarMaestro.setImmediate(true);
		btnEliminarMaestro.setWidth("-1px");
		btnEliminarMaestro.setHeight("-1px");
		hlytBotonera.addComponent(btnEliminarMaestro);
		
		return hlytBotonera;
	}

	@AutoGenerated
	private HorizontalLayout buildLytDetalle() {
		// common part: create layout
		lytDetalle = new HorizontalLayout();
		lytDetalle.setImmediate(false);
		lytDetalle.setWidth("-1px");
		lytDetalle.setHeight("-1px");
		lytDetalle.setMargin(false);
		
		// lytTablaDetalle
		lytTablaDetalle = buildLytTablaDetalle();
		lytDetalle.addComponent(lytTablaDetalle);
		
		// pnlDetalle
		pnlDetalle = buildPnlDetalle();
		lytDetalle.addComponent(pnlDetalle);
		
		return lytDetalle;
	}

	@AutoGenerated
	private HorizontalLayout buildLytTablaDetalle() {
		// common part: create layout
		lytTablaDetalle = new HorizontalLayout();
		lytTablaDetalle.setImmediate(false);
		lytTablaDetalle.setWidth("560px");
		lytTablaDetalle.setHeight("-1px");
		lytTablaDetalle.setMargin(false);
		
		// verticalLayout_3
		verticalLayout_3 = buildVerticalLayout_3();
		lytTablaDetalle.addComponent(verticalLayout_3);
		
		return lytTablaDetalle;
	}

	@AutoGenerated
	private VerticalLayout buildVerticalLayout_3() {
		// common part: create layout
		verticalLayout_3 = new VerticalLayout();
		verticalLayout_3.setImmediate(false);
		verticalLayout_3.setWidth("-1px");
		verticalLayout_3.setHeight("-1px");
		verticalLayout_3.setMargin(false);
		verticalLayout_3.setSpacing(true);
		
		// label_3
		label_3 = new Label();
		label_3.setStyleName("titulo");
		label_3.setImmediate(false);
		label_3.setWidth("-1px");
		label_3.setHeight("-1px");
		label_3.setValue("Departamentos");
		verticalLayout_3.addComponent(label_3);
		
		// treeDeparment
		treeDeparment = new TreeTable();
		treeDeparment.setImmediate(false);
		treeDeparment.setWidth("510px");
		treeDeparment.setHeight("230px");
		verticalLayout_3.addComponent(treeDeparment);
		
		return verticalLayout_3;
	}

	@AutoGenerated
	private VerticalLayout buildPnlDetalle() {
		// common part: create layout
		pnlDetalle = new VerticalLayout();
		pnlDetalle.setImmediate(false);
		pnlDetalle.setWidth("-1px");
		pnlDetalle.setHeight("-1px");
		pnlDetalle.setMargin(false);
		pnlDetalle.setSpacing(true);
		
		// label_2
		label_2 = new Label();
		label_2.setStyleName("titulo");
		label_2.setImmediate(false);
		label_2.setWidth("-1px");
		label_2.setHeight("-1px");
		label_2.setValue("Departamento");
		pnlDetalle.addComponent(label_2);
		pnlDetalle.setComponentAlignment(label_2, new Alignment(20));
		
		// txtCodigoDeta
		txtCodigoDeta = new TextField();
		txtCodigoDeta.setImmediate(false);
		txtCodigoDeta.setDescription("Codigo");
		txtCodigoDeta.setWidth("200px");
		txtCodigoDeta.setHeight("-1px");
		txtCodigoDeta.setInputPrompt("Codigo");
		pnlDetalle.addComponent(txtCodigoDeta);
		
		// txtNombreDeta
		txtNombreDeta = new TextField();
		txtNombreDeta.setImmediate(false);
		txtNombreDeta.setDescription("Nombre");
		txtNombreDeta.setWidth("200px");
		txtNombreDeta.setHeight("-1px");
		txtNombreDeta.setInputPrompt("Nombre");
		pnlDetalle.addComponent(txtNombreDeta);
		
		// cmbPadre
		cmbPadre = new ComboBox();
		cmbPadre.setImmediate(false);
		cmbPadre.setWidth("200px");
		cmbPadre.setHeight("-1px");
		pnlDetalle.addComponent(cmbPadre);
		
		// txaDescripcion
		txaDescripcion = new TextArea();
		txaDescripcion.setImmediate(false);
		txaDescripcion.setWidth("200px");
		txaDescripcion.setHeight("-1px");
		pnlDetalle.addComponent(txaDescripcion);
		
		// horizontalLayout_1
		horizontalLayout_1 = buildHorizontalLayout_1();
		pnlDetalle.addComponent(horizontalLayout_1);
		
		return pnlDetalle;
	}

	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_1() {
		// common part: create layout
		horizontalLayout_1 = new HorizontalLayout();
		horizontalLayout_1.setStyleName("buttoncust");
		horizontalLayout_1.setImmediate(false);
		horizontalLayout_1.setWidth("-1px");
		horizontalLayout_1.setHeight("-1px");
		horizontalLayout_1.setMargin(false);
		horizontalLayout_1.setSpacing(true);
		
		// btnGuardarDetalle
		btnGuardarDetalle = new Button();
		btnGuardarDetalle.setCaption("");
		btnGuardarDetalle.setIcon(new ThemeResource("images/save_16_2.png"));
		btnGuardarDetalle.setDescription("Guardar");
		btnGuardarDetalle.setImmediate(true);
		btnGuardarDetalle.setWidth("-1px");
		btnGuardarDetalle.setHeight("-1px");
		horizontalLayout_1.addComponent(btnGuardarDetalle);
		
		// btnEliminarDetalle
		btnEliminarDetalle = new Button();
		btnEliminarDetalle.setCaption("");
		btnEliminarDetalle.setIcon(new ThemeResource("images/trash_16_2.png"));
		btnEliminarDetalle.setDescription("Eliminar");
		btnEliminarDetalle.setImmediate(true);
		btnEliminarDetalle.setWidth("-1px");
		btnEliminarDetalle.setHeight("-1px");
		horizontalLayout_1.addComponent(btnEliminarDetalle);
		
		return horizontalLayout_1;
	}

}
